package com;

import java.util.Arrays;

/**
 * 策略模式（strategyPattern），定义了一些的算法
 * 将每一种算法封装起来并可以相互替换使用，
 * 策略模式让算法独立于使用它的客户应用而独立变化
 *
 * 核心：把可变的行为抽象出来，这样的好处是这些行为可以在真正的独立出来
 *
 * 策略模式是非常常用的，一个接口有多个实现，不同的实现独立封装，可以按运行时需求相互替换，可维护性就强了，新增接口实现也不会影响其他实现类
 *
 *oo设计原则：
 * 1.面向接口编程（面向抽象编程）
 * 2.封装变化
 * 3.多用组合少用继承lengt
 *
 */
public class StrategyPattern {
    public static void main(String[] args) {
        BaseService user=new UserService();
        user.setiSave(new NetSave());
        user.add("user");


    }
}



interface ISave{
    public void save(String data);
}
class FileSave implements ISave{

    @Override
    public void save(String data) {
        System.out.println("把数据保存到文件中。。。。"+data);
    }
}

class NetSave implements ISave{

    @Override
    public void save(String data) {
        System.out.println("把数据保存到网络中。。。"+data);
    }
}
abstract class BaseService{
    private ISave iSave;
    public void setiSave(ISave iSave){
        this.iSave=iSave;
    }
    public void add(String data){
        System.out.println("检查数据合理性");
        iSave.save(data);
        System.out.println("数据保存完毕");
    }
}
class UserService extends BaseService{

}

